package com.tanhua.util;

import com.tanhua.sso.pojo.Sequence;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.FindAndModifyOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;

@Component
public class IdWorker {

    @Autowired
    private MongoTemplate mongoTemplate;

    public Long getNextId(String collName) {
        Query query = new Query(Criteria.where("collName").is(collName));

        //update默认是false,
        //如果设置成true:将有下面两种功能
        //如果找到与给定查询条件匹配的文档，则 update() 函数会更新该文档。
        //如果没有文档与给定的查询条件匹配，update() 函数将一个新文档插入到集合中
        Update update = new Update();
        update.inc("seqId", 1);

        FindAndModifyOptions options = new FindAndModifyOptions();
        //upsert 选项的值设置为 true 来在Employees 集合中插入一个新文档
        options.upsert(true);
        //返回最新的数据
        options.returnNew(true);

        //返回更新后的数据,具有原子性
        //如果collName不存在,则会创建
        Sequence sequence = mongoTemplate.findAndModify(query, update, options, Sequence.class);
        return sequence.getSeqId();
    }
}